<?php
/**
 * 2017年3月16日
 */
    class MY_Controller extends CI_Controller {

        function __construct(){
            parent::__construct();
            /*开启Session*/
            @session_start();
            // 图片基础参数设置
            // 字符编码
            $this->load->helper('url');
            header ( 'Content-Type: text/html; charset=UTF-8' );
            
            define('IS_GET', $_SERVER['REQUEST_METHOD'] == 'GET' ? true : false);
            define('IS_POST', $_SERVER['REQUEST_METHOD'] == 'POST' ? true : false);

            //阿里oss参数设置
            // define('KEYID','LTAIXmUCIR2ivNwN');
            // define('KEYSECRET', 'DyU8Bed8PqWkDRZrCtTQ0zQh5Zn2Eg');
            // define('BUCKET', 'jujidaoju');

            // define('WEBURL', 'http://jujidaoju.oss-cn-shanghai.aliyuncs.com/');
            // defined('TIMES') or define('TIMES', 3);  
            // defined('FTIMES') or define('FTIMES', 7);
            // define('HW_SUPER',base_url().'static/SuperAdmin/');
            define('HW_JS',base_url().'static/js/');
            define('HW_CSS',base_url().'static/css/');
            define('HW_IMG',base_url().'static/img/');
            define('HW_UE',base_url().'static/ueditor/');
            // define('HW_BT',base_url().'static/bootstrap/');
            // define('HW_VIDEO',base_url().'static/video/');
            define('HW_AdminLTE',base_url().'static/admin-lte/');
            // define('HW_ACE',base_url().'static/ace_1.3/');


            define('HYD_MOB',base_url().'static/mobileDate/');
            define('HW_BUS',base_url().'static/businessman/');
            define('HW_SERVICE',base_url().'static/service/');

            define('HW_FIN',base_url().'static/finance/');
            define('HW_PLAN',base_url().'static/planning/');
            define('HW_EDU',base_url().'static/education/');


            define('HW_STA',base_url().'static/');

            define('DEFAULT_PASS', 'abc123'); 

            define('APP_KEY', 'lingxifu2017'); 
            define('ADDRESS_ID', 1); 
        }

        function trans_rollback($msg = '操作失败')
        {
            $this->db->trans_rollback();
            return array('code'=>0,'msg'=>$msg);
        }

        function trans_commit($msg = '操作成功')
        {
            $this->db->trans_commit();
            return array('code'=>1,'msg'=>$msg);
        }

        /**
         * 获取编码
         * @param  [type] $str [description]
         * @return [type]      [description]
         */
        function get_code($str)
        {
            return $str.date('ymdhis', time()).rand(0, 9).rand(0, 9);
        }

        
        /**
         * 配置数据状态等信息
         * @DateTime 2017-06-28
         * @author zyl
         * @param    [array]     $data   [数据,二维数组]
         * @param    [array]     $config [配置,二维关联数组]
         * @return   [type]             [description]
         */
        function list_to_map($data,$config){
            foreach($data as $key=>&$val){

                foreach($config as $k=>$v){

                    if(isset($val[$k]) && isset($v[$val[$k]])){
                        $val[$k.'_text'] = $v[$val[$k]];;
                    }
                }
            }
            return $data;
        }
        /**
         * 检验签名
         */
        function checkSignature($param){
            if(!isset($param['Uid'])||!isset($param['signature'])){
                return false;
            }else{
                if(strcmp($param['signature'], md5($param['Uid'].date('Ymd')))==0){
                    return true;
                }else{
                    return false;
                }
            }
        }
        /**
         * 自定义操作成功页面 默认跳转操作前一个页面
         * @return [type] [description]
         */
        function success($info='',$jumpUrl='',$waitsecond=1){
            if($jumpUrl==''){
                $jumpUrl = $_SERVER["HTTP_REFERER"];
            }
            $data = array(
                'info'=>$info,
                'jumpUrl'=>$jumpUrl,
                'waitsecond'=>$waitsecond,
                'status'=>1,         //表示成功操作
                'firstloc'=>'操作结果',
                'secondloc'=>'操作成功',
                );
            $this->load->view('Public/message',$data);
        }
        /*
         * 自定义操作失败页面
         * @param  string  $info       [提示信息]
         * @param  [type]  $jumpUrl    [跳转地址]
         * @param  integer $waitsecond [等待时间]
         * @return [type]              [description]
         */
        function error($info='',$jumpUrl='',$waitsecond=2){
            if($jumpUrl==''){
                $jumpUrl = $_SERVER["HTTP_REFERER"];
            }
            $data = array(
                'info'=>$info,
                'jumpUrl'=>$jumpUrl,
                'waitsecond'=>$waitsecond,
                'status'=>0,        //表示失败操作
                'firstloc'=>'操作结果',
                'secondloc'=>'操作失败',
                );
            $this->load->view('Public/message',$data);
        }
        /**
         * 处理操作结果
         * @param  [type] $result [description]
         * @return [type]         [description]
         */
        function handleResult($result,$url = ''){
            if($result['code']==1){
                $this->success($result['msg'],$url);
            }else{
                $this->error($result['msg'],$url);
            }
        }
        /*
        权限验证
        $action[模块名] $method【具体请求的方法,只有3个值 add，edit，del，select，reviewed，all】 $usergroup【用户权限组，取表的usergroup字段】
        例如：用户编辑权限判断时如下调用：
        $this->authcheck('User','edit','23');
        2017.3.27 小黑鼠
        */
        function authcheck($action, $method, $usergroup=0){
            // return true;
           
            $this->load->model('AuthManager/Auth_model','auth');
            //若无权限列表则根据登陆用户session去取权限组的权限
            if(!isset($_SESSION['authgroup'])){
                $_SESSION['authgroup'] = $this->auth->getSessionAuth($_SESSION['admin_info']['role']);
            }
            //若无需检测的权限列表则加载该列表
            // unset($_SESSION['authlist']);
            if(!isset($_SESSION['authlist'])){
                $res = $this->auth->getModuleList();
                foreach ($res as $key => $value) {
                    $authlist[]=$value['authname'];
                }  
                $_SESSION['authlist']= $authlist;
            }

            //操作模块不在模块列表中
            if(!in_array($action, $_SESSION['authlist'])){
                return true;
            }
            //若请求的模块在用户所在权限组里，进行进一步判断
            if(in_array($action, array_keys($_SESSION['authgroup']))){
                if(in_array($method, $_SESSION['authgroup'][$action]) || in_array('all',$_SESSION['authgroup'][$action])){
                    //模块拥有该权限(当前请求或所有)
                    return true;
                }else{
                    return false;
                }
            }else{
                return false;
            }
            
        }
    }

    /**
     * 管理员
     */
    class Admin_Controller extends MY_Controller
    {
        /**
         * 权限检查
         * @param  [type] $class [description]
         * @return [type]        [description]
         */
        function auth_check($class)
        {
               
                //获取用户权限
                $authority = explode(',', $_SESSION['admin_info']['authority']);
                 //判断用户是否有访问控制器的权限
                if(!in_array($class, $authority)){
                    $this->error('对不起,您没有此模块权限');
                    return false;
                }else{
                    return true;
                }
        }
        function __construct()
        {
            parent::__construct();
            //  $this->load->model('SystemLog_model','syslog');//日志 
            //设置一个默认管理员
            // $_SESSION['admin_info']['id'] = 1;
            // $_SESSION['admin_info']['name'] = 'hwkj';
            // $_SESSION['admin_info']['shop_token'] = 'abcdefg12345';
           
            if (!isset($_SESSION['admin_info'])){

                if (Common::isAjax())
                {
                    echo json_encode(array('code'=>0,'msg'=>'您长时间未操作系统，请重新登录'));
                    exit();
                }
                else
                {
                    //跳转回管理员登入界面
                    echo "<script>window.alert('您的登录已失效， 请重新登录'); window.top.location.href = '".base_url()."Admin/Login/login';"."</script>";
                    exit();

                }
            } 
        }
    }
    /**
     * 
     */
    class App_Controller extends MY_Controller
    {
        
        function __construct()
        {
            parent::__construct();
            // if(!isset($_SESSION['userinfo'])){
                $_SESSION['userinfo'] = $this->db->where(array('status>'=>0))->get('user')->row_array();
            // }
            
        }

        /**
         * 校验app签名
         * @DateTime 2017-07-31
         * @author zyl
         * @return   [type]     [description]
         */
        function checkSign(){
            $post = file_get_contents("php://input");
            $post = json_decode($post,true);

            // ksort($post); //键值升序
            $str = '';
            foreach($post as $key=>$val){
                if(!is_array($val) && $key!='sign'){
                    $str.=$key.'='.$val.'&';
                }
            }
            // print_r($str);die();
            $sign = md5($str.'key='.APP_KEY);

            if($post['sign']!=$sign){
                // print_r($sign);die();
                $return = array('code'=>0,'msg'=>'签名验证失败');
                return $return;
            }
            return array('code'=>1,'data'=>$post);

        }

        /**
         * 获取app session
         * @DateTime 2017-08-17
         * @author zyl
         * @param    string     $url     [返回链接(默认上一页)]
         * @param    boolean    $tologin [转跳到app登录]
         * @return   [type]     [description]
         */
        function getAppSession($url='',$tologin=true)
        {   
            if($url==''){
                $url = $_SERVER["HTTP_REFERER"];
            }
            $data['url']     = $url;
            $data['tologin'] = $tologin;
            $this->load->view('App/common/common',$data);
        }
    }

     /**
     * 微信端基控制器
     * @DateTime 2017-07-06
     * @author zyl
     */
    class Weixin_Controller extends MY_Controller
    {
       
        function __construct()
        {
            parent::__construct();
            //本地测试
             $_SESSION['userinfo'] = $this->db->get('user')->row_array();
            // $_SESSION['userinfo'] = array();
            // if(isset($_SESSION['userinfo'])){
            //     $where = array(
            //        'id'=>$_SESSION['userinfo']['id'],
            //        );

            //     $_SESSION['userinfo'] = $this->db->where($where)->get('user')->row_array();
            // }

            
            $url=substr($_SERVER['REQUEST_URI'], 1);
            $_SESSION['redirect_url'] = base_url().$url;
            if(!isset($_SESSION['userinfo'])){
                redirect(base_url().'Weixin/Login/index');
            }
            // else{
            //     //判断是否注册过
            //     if(!isset($_SESSION['userinfo']['nickname'])){
            //         //注册界面
            //         redirect(base_url().'Weixin/Login/index');
            //     }
            // }
        }

    }

    